function sendRequest(url: string, method: 'get' | 'post') {

}

let req = {url: "https://baidu.com", method: "get"}

/**
 * ts 根据上下文推断 req.method 为一个 string
 * ts会以为 req 在声明 和 sendRequest() 的调用之间，
 * 可能会被分配一个其他字符串值
 * */
// sendRequest(req.url,req.method) //ts 报错

//1、方法一 声明 method 的时候指定 method 的 literal type 为 get
//    使其之后不能被修改
let literalReq = {url: "https://baidu.com", method: "get" as 'get'}

// literalReq.method = 'post' 修改时会报错

sendRequest(literalReq.url, literalReq.method)

//2、方法二 使用的时候指定 literal type
//      我知道 req.method 一定是 get literal type 所以才这么声明
sendRequest(req.url,req.method as 'get')


//3、方法三 使用关键字 as const 使整个对象 转为 type literal
// as const 是 把 这个对象的 type system 声明为一个常量，不是把这个对象声明为一个常量
let constReq = {url: "https://bilibili.com", method: "post"} as const

sendRequest(constReq.url, constReq.method)
